#!/bin/bash

MY_NAME="InicioY.sh"

# ve si el directorio corriente esta incluido en el PATH 
function check_path
{

    oldIFS=$IFS # conserva el separador de campo
    IFS=$':' # nuevo separador de campo, el caracter fin de línea

	for i in $PATH
	do
		if [ "$i" == "$PWD" ] 
		then
			return 1
		fi
	done
	IFS=$oldIFS
	return 0
}

# veo si todo el ambiente fue inicializado
function check_inicio
{
if [ "$GRUPO" -a "$CONFDIR" -a "$PIDDIR" -a "$CONFFILE" -a "$BINDIR" -a "$MAEDIR" ]
  then	
	if [ "$ARRIDIR" -a "$RECHDIR" -a "$ACEPDIR" -a "$PROCDIR" -a "$REPODIR" ]
		then 
			if [ "$LOGDIR" -a "$LOGEXT" -a "$LOGSIZE" -a "$DATASIZE" -a "$INICIO_OK" ]
				then
					if [ "$TESPERA" -a "$CANLOOP" ]
						then
				 			return 1
					fi
			fi
	fi
fi
return 0
}

# set permisos a ejecutar a los archivos que paso por parametro
function set_permiso_ejecutar
{
if [ ! -f "$1" ] 
 then	
 	echo "No existe un archivo $2 ($1)."
	GlogY.sh "InicioY" "SE" "No existe un archivo $2 ($1)."
 	return 1
fi	

chmod 777 "$1"
return 0
}

# set permisos para leer/esribir a los archivos que paso por parametro
function set_permiso_le
{
if [ ! -f "$1" ] 
 then	
 	echo "No existe un archivo $2 ($1)."
	GlogY.sh "InicioY" "SE" "No existe un archivo $2 ($1)."
 	return 1
fi	

chmod 666 "$1"
return 0
}

function es_numero
{
	#Compruebo que sea entero positivo
	if ! [[ "$1" =~ ^[0-9]+$ ]] ; then
		echo "Ingrese un número entero y positivo"
		return 1
	else		
	 	return 0
	fi
}


##################### flujo principal #######################
# si el PATH no esta seteado todavia
# seteo el PATH que sera usado por todos para los que no son root

check_path

if [ $? -eq 0 ] 
then
	PATH=$PATH:$PWD
	export PATH
fi

if [ ! -f "bloquear_pid.sh" ] 
 then	
 	echo "No existe un archivo para bloquear procesos (bloquear_pid.sh)."
 	return 0
fi
chmod 777 "bloquear_pid.sh"

if [ ! -f "desbloquear_pid.sh" ] 
 then	
 	echo "No existe un archivo para desbloquear procesos (desbloquear_pid.sh)."
 	return 0
fi
chmod 777 "desbloquear_pid.sh"

GRUPO="${PWD%/grupo06*}/grupo06"
if [ ! -d "$GRUPO" ] 
	then	
		echo "No existe el directorio principal ($GRUPO)."
		return 0
fi	
export GRUPO

CONFDIR="$GRUPO/conf" 
if [ ! -d "$CONFDIR" ] 
	then	
		echo "No existe el directorio de configuracion ($CONFDIR)."
		return 0
fi	
export CONFDIR

PIDDIR="$CONFDIR/pid" 
if [ ! -d "$PIDDIR" ] 
	then	
		echo "No existe el directorio de identificadores de procesos ($PIDDIR)."
		return 0
fi	
export PIDDIR

INICIO_ACTIVO="grupo06"
export INICIO_ACTIVO

###################### parte donde veo si ya esta corriendo el script ##########

if ! bloquear_pid.sh  "${MY_NAME}" ; then
	exit 1
fi
trap "desbloquear_pid.sh '$MY_NAME'" EXIT

################################################################################

CONFFILE="$CONFDIR/InstalY.conf"
set_permiso_le "$CONFFILE" "de configuracion"
if [ $? -ne 0 ] ; then return 0 ; fi
export CONFFILE

# 1) Inicializar el archivo de log
# Veo si existe un archivo de grabar log, si no termino
if [ ! -f "GlogY.sh" ] 
 then	
 	echo "No existe un archivo para grabar log (Glog.sh)."
 	return 0
fi	

chmod 777 "GlogY.sh"

check_inicio

if [ $? -ne 0 ]
 then
	echo "El ambiente ya esta inicializado"
	GlogY.sh "InicioY" "W" "Intento de ejecutar en ambiente ya inicializado."
	return 1
fi

INICIO_OK=""
export INICIO_OK

################################################################################
# 2) Verifico que la instalación está completa
# y cambio permisos de los archivos 
# (ejecutar a los ejecutables y leer/escribir a los demas segun el caso)
#limpio la variable "lista" qu tendra los posibles 
#elementos faltantes en instalacion
LISTA=""
error=""
. check_state.sh
if [ $? -ne 0 ] ; then
	error="1"
	echo "La instalacion no termino correctamente."
	echo "Lista de elementos faltantes:"

        oldIFS=$IFS # conserva el separador de campo
        IFS=$'\n' # nuevo separador de campo, el caracter fin de línea

	for line in $LISTA 
	do  
		echo "$line"
 	done
	echo "Para terminar la instalacion - (. InstalY.sh)"
        IFS=$old_IFS # restablece el separador de campo predeterminado
	return 0
fi

BINDIR=$GRUPO/$BINDIR
MAEDIR=$GRUPO/$MAEDIR
ARRIDIR=$GRUPO/$ARRIDIR
RECHDIR=$GRUPO/$RECHDIR
ACEPDIR=$GRUPO/$ACEPDIR
PROCDIR=$GRUPO/$PROCDIR
REPODIR=$GRUPO/$REPODIR
LOGDIR=$GRUPO/$LOGDIR

export BINDIR
export MAEDIR
export ARRIDIR
export RECHDIR
export ACEPDIR
export PROCDIR
export REPODIR
export LOGDIR
export LOGEXT
export LOGSIZE
export DATASIZE

GlogY.sh "InicioY" "I" "Leidas variables correctamente."

set_permiso_ejecutar "consultas.pl" "de consultas"
if [ $? -ne 0 ] ; then error="1" ; fi

set_permiso_ejecutar "DetectaY.sh" "de deteccion de archivos"
if [ $? -ne 0 ] ; then error="1" ; fi

set_permiso_ejecutar "Interprete.sh" "de interpretacion de archivos"
if [ $? -ne 0 ] ; then error="1" ; fi

set_permiso_ejecutar "ReporteY.pl" "generador de reportes"
if [ $? -ne 0 ] ; then error="1" ; fi

set_permiso_ejecutar "StartY.sh" "disparador de procesos"
if [ $? -ne 0 ] ; then error="1" ; fi

set_permiso_ejecutar "StopY.sh" "para parar procesos"
if [ $? -ne 0 ] ; then error="1" ; fi

if [ $error ] 
	then 
	GlogY.sh "InicioY" "I" "FIN INICIO."
	return 0
fi


echo "Ingrese la cantidad de ciclos del detector de archivos de novedades"
read -r numero
es_numero $numero
while [ $? -ne 0 ]
	do
		read -r numero
		es_numero $numero
	done

CANLOOP=$numero
export CANLOOP

echo "Ingrese tiempo de espera entre ciclos"
read -r numero
es_numero $numero
while [ $? -ne 0 ]
	do
		read -r numero
		es_numero $numero
	done

TESPERA=$numero
export TESPERA

# Para que no pueda colisionar con otros
INICIO_OK="grupo06"
export -n INICIO_ACTIVO
export INICIO_OK

rta="No"
while ! [ "$rta" == "Si" ]
	do
		echo "Quiere ejecutar DetectaY.sh (Si-No)?"
		read -r rta
		if [ "$rta" == "No" ] 
		 then 
			GlogY.sh "InicioY" "I" "FIN INICIO."
			return 0 
		fi
	done
GlogY.sh "InicioY" "I" "Ejecutando DetectaY.sh."

GlogY.sh "InicioY" "I" "FIN INICIO."

DetectaY.sh

